text:
<?xml version="1.0" encoding="utf-8"?>
<MapData>
<Details>
<FileName>[486]M27.rmd</FileName>
<FileType>Red Stone Scenario File 5.3 beta</FileType>
<MapName>幻影の谷 / シトロンリバー上流</MapName>
<SysWidth>350</SysWidth>
<SysHeight>400</SysHeight>
<TgaWidth>700</TgaWidth>
<TgaHeight>400</TgaHeight>
<MapType>1</MapType>
<isPremiumMap>0</isPremiumMap>
<isPvPMap>0</isPvPMap>
<MapView_Lv>7</MapView_Lv>
<isLocationStrage>1</isLocationStrage>
<P_SubElement1>0</P_SubElement1>
<P_SubElement2>0</P_SubElement2>
<P_SubElement3>0</P_SubElement3>
<P_SubElement4>0</P_SubElement4>
<P_SubElement5>0</P_SubElement5>
<P_SubElement6>0</P_SubElement6>
<M_AddElement1>0</M_AddElement1>
<M_AddElement2>0</M_AddElement2>
<M_AddElement3>0</M_AddElement3>
<M_AddElement4>0</M_AddElement4>
<M_AddElement5>0</M_AddElement5>
<M_AddElement6>0</M_AddElement6>
</Details>
<CharacterData>
<Character id="cUid0">
<CharacterUID>0</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>552.75</PopPoint_X>
<PopPoint_Y>32.19</PopPoint_Y>
</Character>
<Character id="cUid1">
<CharacterUID>1</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>558.75</PopPoint_X>
<PopPoint_Y>27.69</PopPoint_Y>
</Character>
<Character id="cUid2">
<CharacterUID>2</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>547.25</PopPoint_X>
<PopPoint_Y>26.75</PopPoint_Y>
</Character>
<Character id="cUid3">
<CharacterUID>3</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>506.25</PopPoint_X>
<PopPoint_Y>16.00</PopPoint_Y>
</Character>
<Character id="cUid4">
<CharacterUID>4</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>519.13</PopPoint_X>
<PopPoint_Y>21.31</PopPoint_Y>
</Character>
<Character id="cUid5">
<CharacterUID>5</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>506.75</PopPoint_X>
<PopPoint_Y>23.69</PopPoint_Y>
</Character>
<Character id="cUid6">
<CharacterUID>6</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>498.13</PopPoint_X>
<PopPoint_Y>52.75</PopPoint_Y>
</Character>
<Character id="cUid7">
<CharacterUID>7</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>489.56</PopPoint_X>
<PopPoint_Y>44.75</PopPoint_Y>
</Character>
<Character id="cUid8">
<CharacterUID>8</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>503.50</PopPoint_X>
<PopPoint_Y>47.56</PopPoint_Y>
</Character>
<Character id="cUid9">
<CharacterUID>9</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>440.19</PopPoint_X>
<PopPoint_Y>19.06</PopPoint_Y>
</Character>
<Character id="cUid10">
<CharacterUID>10</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>454.94</PopPoint_X>
<PopPoint_Y>32.81</PopPoint_Y>
</Character>
<Character id="cUid11">
<CharacterUID>11</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>458.44</PopPoint_X>
<PopPoint_Y>22.50</PopPoint_Y>
</Character>
<Character id="cUid12">
<CharacterUID>12</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>370.81</PopPoint_X>
<PopPoint_Y>17.50</PopPoint_Y>
</Character>
<Character id="cUid13">
<CharacterUID>13</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>387.06</PopPoint_X>
<PopPoint_Y>53.53</PopPoint_Y>
</Character>
<Character id="cUid14">
<CharacterUID>14</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>454.16</PopPoint_X>
<PopPoint_Y>57.28</PopPoint_Y>
</Character>
<Character id="cUid15">
<CharacterUID>15</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>397.50</PopPoint_X>
<PopPoint_Y>59.56</PopPoint_Y>
</Character>
<Character id="cUid16">
<CharacterUID>16</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>457.50</PopPoint_X>
<PopPoint_Y>52.69</PopPoint_Y>
</Character>
<Character id="cUid17">
<CharacterUID>17</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>402.28</PopPoint_X>
<PopPoint_Y>49.16</PopPoint_Y>
</Character>
<Character id="cUid18">
<CharacterUID>18</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>457.91</PopPoint_X>
<PopPoint_Y>63.94</PopPoint_Y>
</Character>
<Character id="cUid19">
<CharacterUID>19</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>358.38</PopPoint_X>
<PopPoint_Y>24.56</PopPoint_Y>
</Character>
<Character id="cUid20">
<CharacterUID>20</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>375.78</PopPoint_X>
<PopPoint_Y>13.94</PopPoint_Y>
</Character>
<Character id="cUid21">
<CharacterUID>21</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>332.63</PopPoint_X>
<PopPoint_Y>57.28</PopPoint_Y>
</Character>
<Character id="cUid22">
<CharacterUID>22</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>348.88</PopPoint_X>
<PopPoint_Y>65.81</PopPoint_Y>
</Character>
<Character id="cUid23">
<CharacterUID>23</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>326.78</PopPoint_X>
<PopPoint_Y>65.19</PopPoint_Y>
</Character>
<Character id="cUid24">
<CharacterUID>24</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>289.56</PopPoint_X>
<PopPoint_Y>20.81</PopPoint_Y>
</Character>
<Character id="cUid25">
<CharacterUID>25</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>302.69</PopPoint_X>
<PopPoint_Y>29.38</PopPoint_Y>
</Character>
<Character id="cUid26">
<CharacterUID>26</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>307.06</PopPoint_X>
<PopPoint_Y>17.28</PopPoint_Y>
</Character>
<Character id="cUid27">
<CharacterUID>27</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>31.88</PopPoint_X>
<PopPoint_Y>344.03</PopPoint_Y>
</Character>
<Character id="cUid28">
<CharacterUID>28</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>42.91</PopPoint_X>
<PopPoint_Y>351.31</PopPoint_Y>
</Character>
<Character id="cUid29">
<CharacterUID>29</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>40.00</PopPoint_X>
<PopPoint_Y>356.75</PopPoint_Y>
</Character>
<Character id="cUid30">
<CharacterUID>30</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>69.16</PopPoint_X>
<PopPoint_Y>312.56</PopPoint_Y>
</Character>
<Character id="cUid31">
<CharacterUID>31</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>82.69</PopPoint_X>
<PopPoint_Y>321.75</PopPoint_Y>
</Character>
<Character id="cUid32">
<CharacterUID>32</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>90.41</PopPoint_X>
<PopPoint_Y>316.53</PopPoint_Y>
</Character>
<Character id="cUid33">
<CharacterUID>33</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>158.44</PopPoint_X>
<PopPoint_Y>247.78</PopPoint_Y>
</Character>
<Character id="cUid34">
<CharacterUID>34</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>169.06</PopPoint_X>
<PopPoint_Y>255.69</PopPoint_Y>
</Character>
<Character id="cUid35">
<CharacterUID>35</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>154.91</PopPoint_X>
<PopPoint_Y>239.88</PopPoint_Y>
</Character>
<Character id="cUid36">
<CharacterUID>36</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>203.13</PopPoint_X>
<PopPoint_Y>21.88</PopPoint_Y>
</Character>
<Character id="cUid37">
<CharacterUID>37</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>225.63</PopPoint_X>
<PopPoint_Y>34.06</PopPoint_Y>
</Character>
<Character id="cUid38">
<CharacterUID>38</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>236.25</PopPoint_X>
<PopPoint_Y>26.56</PopPoint_Y>
</Character>
<Character id="cUid39">
<CharacterUID>39</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>16.25</PopPoint_X>
<PopPoint_Y>107.81</PopPoint_Y>
</Character>
<Character id="cUid40">
<CharacterUID>40</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>47.19</PopPoint_X>
<PopPoint_Y>53.75</PopPoint_Y>
</Character>
<Character id="cUid41">
<CharacterUID>41</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>125.63</PopPoint_X>
<PopPoint_Y>36.25</PopPoint_Y>
</Character>
<Character id="cUid42">
<CharacterUID>42</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>155.00</PopPoint_X>
<PopPoint_Y>82.50</PopPoint_Y>
</Character>
<Character id="cUid43">
<CharacterUID>43</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>184.69</PopPoint_X>
<PopPoint_Y>111.25</PopPoint_Y>
</Character>
<Character id="cUid44">
<CharacterUID>44</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>91.25</PopPoint_X>
<PopPoint_Y>98.13</PopPoint_Y>
</Character>
<Character id="cUid45">
<CharacterUID>45</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>51.25</PopPoint_X>
<PopPoint_Y>64.38</PopPoint_Y>
</Character>
<Character id="cUid46">
<CharacterUID>46</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>127.19</PopPoint_X>
<PopPoint_Y>45.31</PopPoint_Y>
</Character>
<Character id="cUid47">
<CharacterUID>47</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>87.19</PopPoint_X>
<PopPoint_Y>105.00</PopPoint_Y>
</Character>
<Character id="cUid48">
<CharacterUID>48</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>146.56</PopPoint_X>
<PopPoint_Y>30.31</PopPoint_Y>
</Character>
<Character id="cUid49">
<CharacterUID>49</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>160.00</PopPoint_X>
<PopPoint_Y>76.88</PopPoint_Y>
</Character>
<Character id="cUid50">
<CharacterUID>50</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>181.56</PopPoint_X>
<PopPoint_Y>117.50</PopPoint_Y>
</Character>
<Character id="cUid51">
<CharacterUID>51</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>22.81</PopPoint_X>
<PopPoint_Y>115.00</PopPoint_Y>
</Character>
<Character id="cUid52">
<CharacterUID>52</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>25.94</PopPoint_X>
<PopPoint_Y>101.88</PopPoint_Y>
</Character>
<Character id="cUid53">
<CharacterUID>53</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>91.88</PopPoint_X>
<PopPoint_Y>93.44</PopPoint_Y>
</Character>
<Character id="cUid54">
<CharacterUID>54</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>177.81</PopPoint_X>
<PopPoint_Y>103.75</PopPoint_Y>
</Character>
<Character id="cUid55">
<CharacterUID>55</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>149.69</PopPoint_X>
<PopPoint_Y>89.38</PopPoint_Y>
</Character>
<Character id="cUid56">
<CharacterUID>56</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>128.75</PopPoint_X>
<PopPoint_Y>323.69</PopPoint_Y>
</Character>
<Character id="cUid57">
<CharacterUID>57</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>135.00</PopPoint_X>
<PopPoint_Y>332.44</PopPoint_Y>
</Character>
<Character id="cUid58">
<CharacterUID>58</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>142.81</PopPoint_X>
<PopPoint_Y>318.44</PopPoint_Y>
</Character>
<Character id="cUid59">
<CharacterUID>59</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>149.69</PopPoint_X>
<PopPoint_Y>292.81</PopPoint_Y>
</Character>
<Character id="cUid60">
<CharacterUID>60</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>161.25</PopPoint_X>
<PopPoint_Y>301.56</PopPoint_Y>
</Character>
<Character id="cUid61">
<CharacterUID>61</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>171.56</PopPoint_X>
<PopPoint_Y>289.69</PopPoint_Y>
</Character>
<Character id="cUid62">
<CharacterUID>62</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>191.91</PopPoint_X>
<PopPoint_Y>280.13</PopPoint_Y>
</Character>
<Character id="cUid63">
<CharacterUID>63</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>198.16</PopPoint_X>
<PopPoint_Y>286.38</PopPoint_Y>
</Character>
<Character id="cUid64">
<CharacterUID>64</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>208.78</PopPoint_X>
<PopPoint_Y>276.56</PopPoint_Y>
</Character>
<Character id="cUid65">
<CharacterUID>65</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>227.69</PopPoint_X>
<PopPoint_Y>188.88</PopPoint_Y>
</Character>
<Character id="cUid66">
<CharacterUID>66</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>241.44</PopPoint_X>
<PopPoint_Y>193.88</PopPoint_Y>
</Character>
<Character id="cUid67">
<CharacterUID>67</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>222.91</PopPoint_X>
<PopPoint_Y>157.00</PopPoint_Y>
</Character>
<Character id="cUid68">
<CharacterUID>68</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>235.00</PopPoint_X>
<PopPoint_Y>163.03</PopPoint_Y>
</Character>
<Character id="cUid69">
<CharacterUID>69</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>339.25</PopPoint_X>
<PopPoint_Y>159.19</PopPoint_Y>
</Character>
<Character id="cUid70">
<CharacterUID>70</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>628.44</PopPoint_X>
<PopPoint_Y>107.50</PopPoint_Y>
</Character>
<Character id="cUid71">
<CharacterUID>71</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>612.50</PopPoint_X>
<PopPoint_Y>120.31</PopPoint_Y>
</Character>
<Character id="cUid72">
<CharacterUID>72</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>637.50</PopPoint_X>
<PopPoint_Y>91.56</PopPoint_Y>
</Character>
<Character id="cUid73">
<CharacterUID>73</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>645.63</PopPoint_X>
<PopPoint_Y>119.38</PopPoint_Y>
</Character>
<Character id="cUid74">
<CharacterUID>74</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>611.25</PopPoint_X>
<PopPoint_Y>202.19</PopPoint_Y>
</Character>
<Character id="cUid75">
<CharacterUID>75</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>618.44</PopPoint_X>
<PopPoint_Y>214.69</PopPoint_Y>
</Character>
<Character id="cUid76">
<CharacterUID>76</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>637.81</PopPoint_X>
<PopPoint_Y>223.13</PopPoint_Y>
</Character>
<Character id="cUid77">
<CharacterUID>77</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>259.06</PopPoint_X>
<PopPoint_Y>258.75</PopPoint_Y>
</Character>
<Character id="cUid78">
<CharacterUID>78</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>273.44</PopPoint_X>
<PopPoint_Y>251.56</PopPoint_Y>
</Character>
<Character id="cUid79">
<CharacterUID>79</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>281.88</PopPoint_X>
<PopPoint_Y>266.56</PopPoint_Y>
</Character>
<Character id="cUid80">
<CharacterUID>80</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>325.94</PopPoint_X>
<PopPoint_Y>221.25</PopPoint_Y>
</Character>
<Character id="cUid81">
<CharacterUID>81</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>335.00</PopPoint_X>
<PopPoint_Y>233.13</PopPoint_Y>
</Character>
<Character id="cUid82">
<CharacterUID>82</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>353.44</PopPoint_X>
<PopPoint_Y>216.56</PopPoint_Y>
</Character>
<Character id="cUid83">
<CharacterUID>83</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>408.75</PopPoint_X>
<PopPoint_Y>193.44</PopPoint_Y>
</Character>
<Character id="cUid84">
<CharacterUID>84</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>418.13</PopPoint_X>
<PopPoint_Y>204.69</PopPoint_Y>
</Character>
<Character id="cUid85">
<CharacterUID>85</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>435.94</PopPoint_X>
<PopPoint_Y>189.06</PopPoint_Y>
</Character>
<Character id="cUid86">
<CharacterUID>86</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>395.31</PopPoint_X>
<PopPoint_Y>232.50</PopPoint_Y>
</Character>
<Character id="cUid87">
<CharacterUID>87</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>401.25</PopPoint_X>
<PopPoint_Y>246.25</PopPoint_Y>
</Character>
<Character id="cUid88">
<CharacterUID>88</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>421.88</PopPoint_X>
<PopPoint_Y>226.56</PopPoint_Y>
</Character>
<Character id="cUid89">
<CharacterUID>89</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>472.81</PopPoint_X>
<PopPoint_Y>232.88</PopPoint_Y>
</Character>
<Character id="cUid90">
<CharacterUID>90</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>491.88</PopPoint_X>
<PopPoint_Y>241.63</PopPoint_Y>
</Character>
<Character id="cUid91">
<CharacterUID>91</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>484.06</PopPoint_X>
<PopPoint_Y>223.19</PopPoint_Y>
</Character>
<Character id="cUid92">
<CharacterUID>92</CharacterUID>
<CharacterName>イビルアイ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>0</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>484.06</PopPoint_X>
<PopPoint_Y>182.88</PopPoint_Y>
</Character>
<Character id="cUid93">
<CharacterUID>93</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>479.38</PopPoint_X>
<PopPoint_Y>191.31</PopPoint_Y>
</Character>
<Character id="cUid94">
<CharacterUID>94</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>497.81</PopPoint_X>
<PopPoint_Y>200.06</PopPoint_Y>
</Character>
<Character id="cUid95">
<CharacterUID>95</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>549.69</PopPoint_X>
<PopPoint_Y>155.06</PopPoint_Y>
</Character>
<Character id="cUid96">
<CharacterUID>96</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>541.88</PopPoint_X>
<PopPoint_Y>165.69</PopPoint_Y>
</Character>
<Character id="cUid97">
<CharacterUID>97</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>552.19</PopPoint_X>
<PopPoint_Y>172.56</PopPoint_Y>
</Character>
<Character id="cUid98">
<CharacterUID>98</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>438.75</PopPoint_X>
<PopPoint_Y>102.19</PopPoint_Y>
</Character>
<Character id="cUid99">
<CharacterUID>99</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>450.31</PopPoint_X>
<PopPoint_Y>111.25</PopPoint_Y>
</Character>
<Character id="cUid100">
<CharacterUID>100</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>441.56</PopPoint_X>
<PopPoint_Y>97.19</PopPoint_Y>
</Character>
<Character id="cUid101">
<CharacterUID>101</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>475.00</PopPoint_X>
<PopPoint_Y>141.88</PopPoint_Y>
</Character>
<Character id="cUid102">
<CharacterUID>102</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>476.25</PopPoint_X>
<PopPoint_Y>135.63</PopPoint_Y>
</Character>
<Character id="cUid103">
<CharacterUID>103</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>480.63</PopPoint_X>
<PopPoint_Y>148.75</PopPoint_Y>
</Character>
<Character id="cUid104">
<CharacterUID>104</CharacterUID>
<CharacterName>上級ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>4</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>419.97</PopPoint_X>
<PopPoint_Y>150.00</PopPoint_Y>
</Character>
<Character id="cUid105">
<CharacterUID>105</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>83.97</PopPoint_X>
<PopPoint_Y>213.09</PopPoint_Y>
</Character>
<Character id="cUid106">
<CharacterUID>106</CharacterUID>
<CharacterName>死霊</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>6</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>99.94</PopPoint_X>
<PopPoint_Y>200.88</PopPoint_Y>
</Character>
<Character id="cUid107">
<CharacterUID>107</CharacterUID>
<CharacterName>ダークファントム</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>7</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>96.59</PopPoint_X>
<PopPoint_Y>212.13</PopPoint_Y>
</Character>
<Character id="cUid108">
<CharacterUID>108</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>49.44</PopPoint_X>
<PopPoint_Y>195.53</PopPoint_Y>
</Character>
<Character id="cUid109">
<CharacterUID>109</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>60.28</PopPoint_X>
<PopPoint_Y>191.91</PopPoint_Y>
</Character>
<Character id="cUid110">
<CharacterUID>110</CharacterUID>
<CharacterName>地獄の破壊者</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>1</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>61.19</PopPoint_X>
<PopPoint_Y>202.09</PopPoint_Y>
</Character>
<Character id="cUid111">
<CharacterUID>111</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>24.69</PopPoint_X>
<PopPoint_Y>223.06</PopPoint_Y>
</Character>
<Character id="cUid112">
<CharacterUID>112</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>24.84</PopPoint_X>
<PopPoint_Y>214.22</PopPoint_Y>
</Character>
<Character id="cUid113">
<CharacterUID>113</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>40.53</PopPoint_X>
<PopPoint_Y>229.06</PopPoint_Y>
</Character>
<Character id="cUid114">
<CharacterUID>114</CharacterUID>
<CharacterName>地獄の魔法師</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>9</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>14.31</PopPoint_X>
<PopPoint_Y>185.31</PopPoint_Y>
</Character>
<Character id="cUid115">
<CharacterUID>115</CharacterUID>
<CharacterName>冥府の番人</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>8</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>20.38</PopPoint_X>
<PopPoint_Y>195.47</PopPoint_Y>
</Character>
<Character id="cUid116">
<CharacterUID>116</CharacterUID>
<CharacterName>ヘルズダンサー</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>2</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>4.59</PopPoint_X>
<PopPoint_Y>176.19</PopPoint_Y>
</Character>
<Character id="cUid117">
<CharacterUID>117</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>38.25</PopPoint_X>
<PopPoint_Y>71.28</PopPoint_Y>
</Character>
<Character id="cUid118">
<CharacterUID>118</CharacterUID>
<CharacterName>ペガサス</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>3</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>69.63</PopPoint_X>
<PopPoint_Y>47.25</PopPoint_Y>
</Character>
<Character id="cUid119">
<CharacterUID>119</CharacterUID>
<CharacterName>マッドピエロ</CharacterName>
<CharacterType>2</CharacterType>
<InternalID>5</InternalID>
<PopSpeed>90</PopSpeed>
<PopPoint_X>197.91</PopPoint_X>
<PopPoint_Y>42.13</PopPoint_Y>
</Character>
</CharacterData>
<AreaData>
<Area id="aUid0">
<AreaUID>0</AreaUID>
<AreaName>_필드 전체</AreaName>
<AreaType>0</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>0.00</AreaPos_X>
<AreaPos_X2>0.00</AreaPos_X2>
<AreaPos_Y>0.00</AreaPos_Y>
<AreaPos_Y2>0.00</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid1">
<AreaUID>1</AreaUID>
<AreaName>_화면</AreaName>
<AreaType>0</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>0.00</AreaPos_X>
<AreaPos_X2>0.00</AreaPos_X2>
<AreaPos_Y>0.00</AreaPos_Y>
<AreaPos_Y2>0.00</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid2">
<AreaUID>2</AreaUID>
<AreaName>[이동] M26-2</AreaName>
<AreaType>3</AreaType>
<AccessMap>[487]M26.rmd</AccessMap>
<AccessMapName>幻影の谷 / ブラックファイヤーダンジョン付近</AccessMapName>
<AreaPos_X>2.00</AreaPos_X>
<AreaPos_X2>6.63</AreaPos_X2>
<AreaPos_Y>208.19</AreaPos_Y>
<AreaPos_Y2>210.69</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid3">
<AreaUID>3</AreaUID>
<AreaName>[이동] M26-1</AreaName>
<AreaType>3</AreaType>
<AccessMap>[487]M26.rmd</AccessMap>
<AccessMapName>幻影の谷 / ブラックファイヤーダンジョン付近</AccessMapName>
<AreaPos_X>1.97</AreaPos_X>
<AreaPos_X2>6.72</AreaPos_X2>
<AreaPos_Y>70.16</AreaPos_Y>
<AreaPos_Y2>72.72</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid4">
<AreaUID>4</AreaUID>
<AreaName>[이동] M26-3</AreaName>
<AreaType>3</AreaType>
<AccessMap>[487]M26.rmd</AccessMap>
<AccessMapName>幻影の谷 / ブラックファイヤーダンジョン付近</AccessMapName>
<AreaPos_X>2.00</AreaPos_X>
<AreaPos_X2>6.72</AreaPos_X2>
<AreaPos_Y>338.53</AreaPos_Y>
<AreaPos_Y2>341.28</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid5">
<AreaUID>5</AreaUID>
<AreaName>[이동] T19</AreaName>
<AreaType>3</AreaType>
<AccessMap>[480]T19.rmd</AccessMap>
<AccessMapName>港町ボルティッシュ</AccessMapName>
<AreaPos_X>559.66</AreaPos_X>
<AreaPos_X2>564.31</AreaPos_X2>
<AreaPos_Y>4.25</AreaPos_Y>
<AreaPos_Y2>6.88</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid6">
<AreaUID>6</AreaUID>
<AreaName>Area 5</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>544.34</AreaPos_X>
<AreaPos_X2>565.44</AreaPos_X2>
<AreaPos_Y>23.44</AreaPos_Y>
<AreaPos_Y2>37.81</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid7">
<AreaUID>7</AreaUID>
<AreaName>Area 6</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>501.06</AreaPos_X>
<AreaPos_X2>526.22</AreaPos_X2>
<AreaPos_Y>13.44</AreaPos_Y>
<AreaPos_Y2>30.94</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid8">
<AreaUID>8</AreaUID>
<AreaName>Area 7</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>483.72</AreaPos_X>
<AreaPos_X2>517.47</AreaPos_X2>
<AreaPos_Y>40.47</AreaPos_Y>
<AreaPos_Y2>60.31</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid9">
<AreaUID>9</AreaUID>
<AreaName>Area 8</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>436.38</AreaPos_X>
<AreaPos_X2>464.97</AreaPos_X2>
<AreaPos_Y>14.53</AreaPos_Y>
<AreaPos_Y2>37.97</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid10">
<AreaUID>10</AreaUID>
<AreaName>Area 9</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>442.00</AreaPos_X>
<AreaPos_X2>469.97</AreaPos_X2>
<AreaPos_Y>49.53</AreaPos_Y>
<AreaPos_Y2>67.34</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid11">
<AreaUID>11</AreaUID>
<AreaName>Area 10</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>350.59</AreaPos_X>
<AreaPos_X2>390.59</AreaPos_X2>
<AreaPos_Y>6.72</AreaPos_Y>
<AreaPos_Y2>31.88</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid12">
<AreaUID>12</AreaUID>
<AreaName>Area 11</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>376.38</AreaPos_X>
<AreaPos_X2>414.34</AreaPos_X2>
<AreaPos_Y>45.78</AreaPos_Y>
<AreaPos_Y2>65.00</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid13">
<AreaUID>13</AreaUID>
<AreaName>Area 12</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>283.13</AreaPos_X>
<AreaPos_X2>322.34</AreaPos_X2>
<AreaPos_Y>14.22</AreaPos_Y>
<AreaPos_Y2>38.28</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid14">
<AreaUID>14</AreaUID>
<AreaName>Area 13</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>191.72</AreaPos_X>
<AreaPos_X2>247.03</AreaPos_X2>
<AreaPos_Y>15.78</AreaPos_Y>
<AreaPos_Y2>44.53</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid15">
<AreaUID>15</AreaUID>
<AreaName>Area 14</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>100.00</AreaPos_X>
<AreaPos_X2>158.59</AreaPos_X2>
<AreaPos_Y>25.94</AreaPos_Y>
<AreaPos_Y2>55.47</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid16">
<AreaUID>16</AreaUID>
<AreaName>Area 15</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>28.59</AreaPos_X>
<AreaPos_X2>74.38</AreaPos_X2>
<AreaPos_Y>42.50</AreaPos_Y>
<AreaPos_Y2>74.06</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid17">
<AreaUID>17</AreaUID>
<AreaName>Area 16</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>316.56</AreaPos_X>
<AreaPos_X2>362.81</AreaPos_X2>
<AreaPos_Y>47.81</AreaPos_Y>
<AreaPos_Y2>72.66</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid18">
<AreaUID>18</AreaUID>
<AreaName>Area 17</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>23.88</AreaPos_X>
<AreaPos_X2>53.22</AreaPos_X2>
<AreaPos_Y>337.34</AreaPos_Y>
<AreaPos_Y2>359.44</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid19">
<AreaUID>19</AreaUID>
<AreaName>Area 18</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>62.56</AreaPos_X>
<AreaPos_X2>99.13</AreaPos_X2>
<AreaPos_Y>306.69</AreaPos_Y>
<AreaPos_Y2>332.38</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid20">
<AreaUID>20</AreaUID>
<AreaName>Area 19</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>115.38</AreaPos_X>
<AreaPos_X2>153.44</AreaPos_X2>
<AreaPos_Y>315.44</AreaPos_Y>
<AreaPos_Y2>337.75</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid21">
<AreaUID>21</AreaUID>
<AreaName>Area 20</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>139.69</AreaPos_X>
<AreaPos_X2>178.19</AreaPos_X2>
<AreaPos_Y>287.19</AreaPos_Y>
<AreaPos_Y2>309.69</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid22">
<AreaUID>22</AreaUID>
<AreaName>Area 21</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>185.56</AreaPos_X>
<AreaPos_X2>217.94</AreaPos_X2>
<AreaPos_Y>273.75</AreaPos_Y>
<AreaPos_Y2>290.44</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid24">
<AreaUID>24</AreaUID>
<AreaName>Area 23</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>235.72</AreaPos_X>
<AreaPos_X2>291.88</AreaPos_X2>
<AreaPos_Y>245.63</AreaPos_Y>
<AreaPos_Y2>270.31</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid25">
<AreaUID>25</AreaUID>
<AreaName>Area 24</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>311.97</AreaPos_X>
<AreaPos_X2>363.44</AreaPos_X2>
<AreaPos_Y>212.28</AreaPos_Y>
<AreaPos_Y2>244.06</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid26">
<AreaUID>26</AreaUID>
<AreaName>Area 25</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>382.19</AreaPos_X>
<AreaPos_X2>433.75</AreaPos_X2>
<AreaPos_Y>221.25</AreaPos_Y>
<AreaPos_Y2>255.31</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid28">
<AreaUID>28</AreaUID>
<AreaName>Area 27</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>399.38</AreaPos_X>
<AreaPos_X2>447.50</AreaPos_X2>
<AreaPos_Y>185.19</AreaPos_Y>
<AreaPos_Y2>212.81</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid30">
<AreaUID>30</AreaUID>
<AreaName>Area 29</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>469.56</AreaPos_X>
<AreaPos_X2>516.84</AreaPos_X2>
<AreaPos_Y>177.00</AreaPos_Y>
<AreaPos_Y2>205.44</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid31">
<AreaUID>31</AreaUID>
<AreaName>Area 30</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>450.66</AreaPos_X>
<AreaPos_X2>507.81</AreaPos_X2>
<AreaPos_Y>219.75</AreaPos_Y>
<AreaPos_Y2>248.13</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid32">
<AreaUID>32</AreaUID>
<AreaName>Area 31</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>534.09</AreaPos_X>
<AreaPos_X2>567.00</AreaPos_X2>
<AreaPos_Y>151.25</AreaPos_Y>
<AreaPos_Y2>178.66</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid33">
<AreaUID>33</AreaUID>
<AreaName>Area 32</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>459.00</AreaPos_X>
<AreaPos_X2>500.25</AreaPos_X2>
<AreaPos_Y>132.19</AreaPos_Y>
<AreaPos_Y2>152.03</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid34">
<AreaUID>34</AreaUID>
<AreaName>Area 33</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>413.13</AreaPos_X>
<AreaPos_X2>428.44</AreaPos_X2>
<AreaPos_Y>144.94</AreaPos_Y>
<AreaPos_Y2>153.25</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid35">
<AreaUID>35</AreaUID>
<AreaName>Area 34</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>215.75</AreaPos_X>
<AreaPos_X2>245.69</AreaPos_X2>
<AreaPos_Y>153.63</AreaPos_Y>
<AreaPos_Y2>169.50</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid36">
<AreaUID>36</AreaUID>
<AreaName>Area 35</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>329.50</AreaPos_X>
<AreaPos_X2>350.88</AreaPos_X2>
<AreaPos_Y>154.63</AreaPos_Y>
<AreaPos_Y2>167.50</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid37">
<AreaUID>37</AreaUID>
<AreaName>Area 36</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>222.63</AreaPos_X>
<AreaPos_X2>250.06</AreaPos_X2>
<AreaPos_Y>185.38</AreaPos_Y>
<AreaPos_Y2>199.25</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid38">
<AreaUID>38</AreaUID>
<AreaName>Area 37</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>77.31</AreaPos_X>
<AreaPos_X2>107.94</AreaPos_X2>
<AreaPos_Y>196.31</AreaPos_Y>
<AreaPos_Y2>218.88</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid39">
<AreaUID>39</AreaUID>
<AreaName>Area 38</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>9.75</AreaPos_X>
<AreaPos_X2>43.56</AreaPos_X2>
<AreaPos_Y>211.56</AreaPos_Y>
<AreaPos_Y2>230.75</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid40">
<AreaUID>40</AreaUID>
<AreaName>Area 39</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>2.06</AreaPos_X>
<AreaPos_X2>24.31</AreaPos_X2>
<AreaPos_Y>172.69</AreaPos_Y>
<AreaPos_Y2>199.13</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid41">
<AreaUID>41</AreaUID>
<AreaName>Area 40</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>44.13</AreaPos_X>
<AreaPos_X2>66.94</AreaPos_X2>
<AreaPos_Y>187.69</AreaPos_Y>
<AreaPos_Y2>204.44</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid42">
<AreaUID>42</AreaUID>
<AreaName>Area 41</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>78.91</AreaPos_X>
<AreaPos_X2>108.06</AreaPos_X2>
<AreaPos_Y>90.13</AreaPos_Y>
<AreaPos_Y2>110.53</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid43">
<AreaUID>43</AreaUID>
<AreaName>Area 42</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>5.31</AreaPos_X>
<AreaPos_X2>38.44</AreaPos_X2>
<AreaPos_Y>99.50</AreaPos_Y>
<AreaPos_Y2>118.81</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid44">
<AreaUID>44</AreaUID>
<AreaName>Area 43</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>137.69</AreaPos_X>
<AreaPos_X2>169.16</AreaPos_X2>
<AreaPos_Y>73.59</AreaPos_Y>
<AreaPos_Y2>93.81</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid45">
<AreaUID>45</AreaUID>
<AreaName>Area 44</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>426.00</AreaPos_X>
<AreaPos_X2>463.75</AreaPos_X2>
<AreaPos_Y>94.81</AreaPos_Y>
<AreaPos_Y2>117.63</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid46">
<AreaUID>46</AreaUID>
<AreaName>Area 45</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>171.13</AreaPos_X>
<AreaPos_X2>201.13</AreaPos_X2>
<AreaPos_Y>101.56</AreaPos_Y>
<AreaPos_Y2>120.88</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid47">
<AreaUID>47</AreaUID>
<AreaName>Area 46</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>602.50</AreaPos_X>
<AreaPos_X2>657.50</AreaPos_X2>
<AreaPos_Y>83.13</AreaPos_Y>
<AreaPos_Y2>130.31</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid48">
<AreaUID>48</AreaUID>
<AreaName>Area 47</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>602.19</AreaPos_X>
<AreaPos_X2>647.81</AreaPos_X2>
<AreaPos_Y>192.50</AreaPos_Y>
<AreaPos_Y2>230.94</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
<Area id="aUid49">
<AreaUID>49</AreaUID>
<AreaName>Area 48</AreaName>
<AreaType>4</AreaType>
<AccessMap></AccessMap>
<AccessMapName></AccessMapName>
<AreaPos_X>137.88</AreaPos_X>
<AreaPos_X2>183.50</AreaPos_X2>
<AreaPos_Y>234.75</AreaPos_Y>
<AreaPos_Y2>262.25</AreaPos_Y2>
<AreaExpansion>
</AreaExpansion>
</Area>
</AreaData>
</MapData>


text:
<!DOCTYPE html>

	<title>Leaflet Map</title>
	<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.7.3/leaflet.css" />

		<button id="addButton">Show All Coffee Shops</button>
		<button id="removeButton">Hide All Coffee Shops</button>
		<button id="toggleButton">Toggle All Coffee Shops</button>
		<button id="filterSBux">Starbucks</button>
		<button id="filterDD">Dunkin Donuts</button>

redpajama_set_name: RedPajamaGithub


text:
import { Directive, Input, Output, EventEmitter, ElementRef, OnDestroy, NgZone, OnInit } from '@angular/core';
import { interval, Observable, Subscription, Subject } from 'rxjs';
import { filter, takeUntil } from 'rxjs/operators';

export enum DragScrollDirection {
    NONE,
    LEFT,
    TOP,
    RIGHT,
    BOTTOM,
    TOPLEFT,
    TOPRIGHT,
    BOTTOMLEFT,
    BOTTOMRIGHT
}

@Directive({
    selector: '[igxGridDragSelect]'
})
export class IgxGridDragSelectDirective implements OnInit, OnDestroy {
    @Output()
    onDragStop = new EventEmitter<boolean>();

    @Output()
    onDragScroll = new EventEmitter<DragScrollDirection>();

    _activeDrag: boolean;

    @Input('igxGridDragSelect')
    get activeDrag(): boolean {
        return this._activeDrag;
    }

    set activeDrag(val: boolean) {
        if (val !== this._activeDrag) {
            this.unsubscribe();
            this._activeDrag = val;
        }
    }

    get nativeElement(): HTMLElement {
        return this.ref.nativeElement;
    }

    get clientRect(): ClientRect {
        return this.nativeElement.getBoundingClientRect();
    }

    protected end$ = new Subject<any>();
    protected lastDirection = DragScrollDirection.NONE;
    protected _interval$: Observable<any>;
    protected _sub: Subscription;

    constructor(private ref: ElementRef, private zone: NgZone) {
        this._interval$ = interval(100).pipe(
            takeUntil(this.end$),
            filter(() => this.activeDrag)
        );
    }

    ngOnInit() {
        this.zone.runOutsideAngular(() => {
            this.nativeElement.addEventListener('pointerover', this.startDragSelection);
            this.nativeElement.addEventListener('pointerleave', this.stopDragSelection);
        });
    }

    ngOnDestroy() {
        this.zone.runOutsideAngular(() => {
            this.nativeElement.removeEventListener('pointerover', this.startDragSelection);
            this.nativeElement.removeEventListener('pointerleave', this.stopDragSelection);
        });
        this.unsubscribe();
        this.end$.complete();
    }

    startDragSelection = (ev: PointerEvent) => {
        if (!this.activeDrag) {
            return;
        }
        const x = ev.clientX;
        const y = ev.clientY;
        const direction = this._measureDimensions(x, y);
        if (direction === this.lastDirection) {
            return;
        }
        this.unsubscribe();
        this._sub = this._interval$.subscribe(() => this.onDragScroll.emit(direction));
        this.lastDirection = direction;
    };

    stopDragSelection = () => {
        if (!this.activeDrag) {
            return;
        }
        this.onDragStop.emit(false);
        this.unsubscribe();
        this.lastDirection = DragScrollDirection.NONE;
    };

    _measureDimensions(x: number, y: number): DragScrollDirection {
        let direction: DragScrollDirection;

        const rect = this.clientRect;
        const RATIO = 0.15;
        const offsetX = Math.trunc(x - rect.left);
        const offsetY = Math.trunc(y - rect.top);

        const left = offsetX <= rect.width * RATIO;
        const right = offsetX >= rect.width * (1 - RATIO);
        const top = offsetY <= rect.height * RATIO;
        const bottom = offsetY >= rect.height * (1 - RATIO);

        if (top && left) {
            direction = DragScrollDirection.TOPLEFT;
        } else if (top && right) {
            direction = DragScrollDirection.TOPRIGHT;
        } else if (bottom && left) {
            direction = DragScrollDirection.BOTTOMLEFT;
        } else if (bottom && right) {
            direction = DragScrollDirection.BOTTOMRIGHT;
        } else if (top) {
            direction = DragScrollDirection.TOP;
        } else if (bottom) {
            direction = DragScrollDirection.BOTTOM;
        } else if (left) {
            direction = DragScrollDirection.LEFT;
        } else if (right) {
            direction = DragScrollDirection.RIGHT;
        } else {
            direction = DragScrollDirection.NONE;
        }

        return direction;

    }

    protected unsubscribe() {
        if (this._sub) {
            this._sub.unsubscribe();
        }
    }
}


text:
<!DOCTYPE html>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">

    <title>FindMyMineSite</title>

    <link href="http://netdna.bootstrapcdn.com/bootswatch/3.0.2/cyborg/bootstrap.min.css" rel="stylesheet">
    <link href="http://netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.min.css" rel="stylesheet">
    <link href='http://fonts.googleapis.com/css?family=Open+Sans:400,700' rel='stylesheet' type='text/css'>

        Click on a townsite to locate nearby mine sites.


text: require_relative 'ebayr_business_policies'


text:
package uk.gov.ons.ctp.response.casesvc.domain.model;

public interface CaseProjection {
  Integer getCaseId();
}


text:
"""Helper functions which doesn't fit anywhere else"""

import re
import hashlib
from pkgutil import iter_modules

from w3lib.html import remove_entities
from scrapy.utils.python import flatten

def arg_to_iter(arg):
    """Convert an argument to an iterable. The argument can be a None, single
    value, or an iterable.

    Exception: if arg is a dict, [arg] will be returned
    """
    if arg is None:
        return []
    elif not isinstance(arg, dict) and hasattr(arg, '__iter__'):
        return arg
    else:
        return [arg]

def load_object(path):
    """Load an object given its absolute object path, and return it.

    object can be a class, function, variable o instance.
    path ie: 'scrapy.contrib.downloadermiddelware.redirect.RedirectMiddleware'
    """

    try:
        dot = path.rindex('.')
    except ValueError:
        raise ValueError, "Error loading object '%s': not a full path" % path

    module, name = path[:dot], path[dot+1:]
    try:
        mod = __import__(module, {}, {}, [''])
    except ImportError, e:
        raise ImportError, "Error loading object '%s': %s" % (path, e)

    try:
        obj = getattr(mod, name)
    except AttributeError:
        raise NameError, "Module '%s' doesn't define any object named '%s'" % (module, name)

    return obj

def walk_modules(path, load=False):
    """Loads a module and all its submodules from a the given module path and
    returns them. If *any* module throws an exception while importing, that
    exception is thrown back.

    For example: walk_modules('scrapy.utils')
    """

    mods = []
    mod = __import__(path, {}, {}, [''])
    mods.append(mod)
    if hasattr(mod, '__path__'):
        for _, subpath, ispkg in iter_modules(mod.__path__):
            fullpath = path + '.' + subpath
            if ispkg:
                mods += walk_modules(fullpath)
            else:
                submod = __import__(fullpath, {}, {}, [''])
                mods.append(submod)
    return mods

def extract_regex(regex, text, encoding='utf-8'):
    """Extract a list of unicode strings from the given text/encoding using the following policies:

    * if the regex contains a named group called "extract" that will be returned
    * if the regex contains multiple numbered groups, all those will be returned (flattened)
    * if the regex doesn't contain any group the entire regex matching is returned
    """

    if isinstance(regex, basestring):
        regex = re.compile(regex, re.UNICODE)

    try:
        strings = [regex.search(text).group('extract')]   # named group
    except:
        strings = regex.findall(text)    # full regex or numbered groups
    strings = flatten(strings)

    if isinstance(text, unicode):
        return [remove_entities(s, keep=['lt', 'amp']) for s in strings]
    else:
        return [remove_entities(unicode(s, encoding), keep=['lt', 'amp']) for s in strings]

def md5sum(file):
    """Calculate the md5 checksum of a file-like object without reading its
    whole content in memory.

    >>> from StringIO import StringIO
    >>> md5sum(StringIO('file content to hash'))
    '784406af91dd5a54fbb9c84c2236595a'
    """
    m = hashlib.md5()
    while 1:
        d = file.read(8096)
        if not d:
            break
        m.update(d)
    return m.hexdigest()


text:
<?php

namespace Ivory\GoogleMap\Helper\Collector\Overlay;

use Ivory\GoogleMap\Helper\Collector\AbstractCollector;
use Ivory\GoogleMap\Map;
use Ivory\GoogleMap\Overlay\InfoWindow;

/**
 * @author GeLo <geloen.eric@gmail.com>
 */
class InfoWindowCollector extends AbstractCollector
{
    const STRATEGY_MAP = 1;
    const STRATEGY_MARKER = 2;

    /**
     * @var MarkerCollector
     */
    private $markerCollector;

    /**
     * @var string|null
     */
    private $type;

    /**
     * @param MarkerCollector $markerCollector
     * @param string|null     $type
     */
    public function __construct(MarkerCollector $markerCollector, $type = null)
    {
        $this->setMarkerCollector($markerCollector);
        $this->setType($type);
    }

    /**
     * @return MarkerCollector
     */
    public function getMarkerCollector()
    {
        return $this->markerCollector;
    }

    /**
     * @param MarkerCollector $markerCollector
     */
    public function setMarkerCollector(MarkerCollector $markerCollector)
    {
        $this->markerCollector = $markerCollector;
    }

    /**
     * @return string|null
     */
    public function getType()
    {
        return $this->type;
    }

    /**
     * @param string|null $type
     */
    public function setType($type)
    {
        $this->type = $type;
    }

    /**
     * @param Map          $map
     * @param InfoWindow[] $infoWindows
     * @param int|null     $strategy
     *
     * @return InfoWindow[]
     */
    public function collect(Map $map, array $infoWindows = [], $strategy = null)
    {
        if ($strategy === null) {
            $strategy = self::STRATEGY_MAP | self::STRATEGY_MARKER;
        }

        if ($strategy & self::STRATEGY_MAP) {
            $infoWindows = $this->collectValues($map->getOverlayManager()->getInfoWindows(), $infoWindows);
        }

        if ($strategy & self::STRATEGY_MARKER) {
            foreach ($this->markerCollector->collect($map) as $marker) {
                if ($marker->hasInfoWindow()) {
                    $infoWindows = $this->collectValue($marker->getInfoWindow(), $infoWindows);
                }
            }
        }

        return $infoWindows;
    }

    /**
     * {@inheritdoc}
     */
    protected function collectValue($value, array $defaults = [])
    {
        if ($this->type !== null && $value->getType() !== $this->type) {
            return $defaults;
        }

        return parent::collectValue($value, $defaults);
    }
}


text:
#pragma once
#include <aws/machinelearning/MachineLearning_EXPORTS.h>
#include <aws/core/utils/memory/stl/AWSString.h>
#include <aws/machinelearning/model/TaggableResourceType.h>
#include <aws/core/utils/memory/stl/AWSVector.h>
#include <aws/machinelearning/model/Tag.h>
#include <utility>

namespace Aws
{
template<typename RESULT_TYPE>
class AmazonWebServiceResult;

namespace Utils
{
namespace Json
{
  class JsonValue;
} // namespace Json
} // namespace Utils
namespace MachineLearning
{
namespace Model
{
  /**
   *
Amazon ML returns the following elements.

See Also:
   AWS
   * API Reference

   */
  class AWS_MACHINELEARNING_API DescribeTagsResult
  {
  public:
    DescribeTagsResult();
    DescribeTagsResult(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);
    DescribeTagsResult& operator=(const Aws::AmazonWebServiceResult<Aws::Utils::Json::JsonValue>& result);

    /**
     *
The ID of the tagged ML object.

     */
    inline const Aws::String& GetResourceId() const{ return m_resourceId; }

    /**
     *
The ID of the tagged ML object.

     */
    inline void SetResourceId(const Aws::String& value) { m_resourceId = value; }

    /**
     *
The ID of the tagged ML object.

     */
    inline void SetResourceId(Aws::String&& value) { m_resourceId = std::move(value); }

    /**
     *
The ID of the tagged ML object.

     */
    inline void SetResourceId(const char* value) { m_resourceId.assign(value); }

    /**
     *
The ID of the tagged ML object.

     */
    inline DescribeTagsResult& WithResourceId(const Aws::String& value) { SetResourceId(value); return *this;}

    /**
     *
The ID of the tagged ML object.

     */
    inline DescribeTagsResult& WithResourceId(Aws::String&& value) { SetResourceId(std::move(value)); return *this;}

    /**
     *
The ID of the tagged ML object.

     */
    inline DescribeTagsResult& WithResourceId(const char* value) { SetResourceId(value); return *this;}

    /**
     *
The type of the tagged ML object.

     */
    inline const TaggableResourceType& GetResourceType() const{ return m_resourceType; }

    /**
     *
The type of the tagged ML object.

     */
    inline void SetResourceType(const TaggableResourceType& value) { m_resourceType = value; }

    /**
     *
The type of the tagged ML object.

     */
    inline void SetResourceType(TaggableResourceType&& value) { m_resourceType = std::move(value); }

    /**
     *
The type of the tagged ML object.

     */
    inline DescribeTagsResult& WithResourceType(const TaggableResourceType& value) { SetResourceType(value); return *this;}

    /**
     *
The type of the tagged ML object.

     */
    inline DescribeTagsResult& WithResourceType(TaggableResourceType&& value) { SetResourceType(std::move(value)); return *this;}

    /**
     *
A list of tags associated with the ML object.

     */
    inline const Aws::Vector<Tag>& GetTags() const{ return m_tags; }

    /**
     *
A list of tags associated with the ML object.

     */
    inline void SetTags(const Aws::Vector<Tag>& value) { m_tags = value; }

    /**
     *
A list of tags associated with the ML object.

     */
    inline void SetTags(Aws::Vector<Tag>&& value) { m_tags = std::move(value); }

    /**
     *
A list of tags associated with the ML object.

     */
    inline DescribeTagsResult& WithTags(const Aws::Vector<Tag>& value) { SetTags(value); return *this;}

    /**
     *
A list of tags associated with the ML object.

     */
    inline DescribeTagsResult& WithTags(Aws::Vector<Tag>&& value) { SetTags(std::move(value)); return *this;}

    /**
     *
A list of tags associated with the ML object.

     */
    inline DescribeTagsResult& AddTags(const Tag& value) { m_tags.push_back(value); return *this; }

    /**
     *
A list of tags associated with the ML object.

     */
    inline DescribeTagsResult& AddTags(Tag&& value) { m_tags.push_back(std::move(value)); return *this; }

  private:

    Aws::String m_resourceId;

    TaggableResourceType m_resourceType;

    Aws::Vector<Tag> m_tags;
  };

} // namespace Model
} // namespace MachineLearning
} // namespace Aws


text:
![Azure Public Test Date](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/PublicLastTestDate.svg)
![Azure Public Test Result](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/PublicDeployment.svg)

![Azure US Gov Last Test Date](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/FairfaxLastTestDate.svg)
![Azure US Gov Last Test Result](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/FairfaxDeployment.svg)

![Best Practice Check](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/BestPracticeResult.svg)
![Cred Scan Check](https://azurequickstartsservice.blob.core.windows.net/badges/201-machine-learning-encrypted-workspace/CredScanResult.svg)

[![Deploy To Azure](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/deploytoazure.svg?sanitize=true)](https://portal.azure.com/#create/Microsoft.Template/uri/https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F201-machine-learning-encrypted-workspace%2Fazuredeploy.json)
[![Visualize](https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/1-CONTRIBUTION-GUIDE/images/visualizebutton.svg?sanitize=true)](http://armviz.io/#/?load=https%3A%2F%2Fraw.githubusercontent.com%2FAzure%2Fazure-quickstart-templates%2Fmaster%2F201-machine-learning-encrypted-workspace%2Fazuredeploy.json)

This template creates an Azure Machine Learning workspace with the following configurations:

* confidential_data: Enabling this turns on the following behavior in your Azure Machine Learning workspace:

  * Starts encrypting the local scratch disk for Azure Machine Learning compute clusters, providing you have not created any previous clusters in your subscription. If you have previously created a cluster in the subscription, open a support ticket to have encryption of the scratch disk enabled for your compute clusters.
  * Cleans up the local scratch disk between runs.
  * Securely passes credentials for the storage account, container registry, and SSH account from the execution layer to your compute clusters by using key vault.
  * Enables IP filtering to ensure the underlying batch pools cannot be called by any external services other than AzureMachineLearningService.

    For more information,, see [encryption at rest](https://docs.microsoft.com/azure/machine-learning/concept-enterprise-security#encryption-at-rest).

* encryption_status: Enables you to use your own (customer-managed) key to [encrypt the Azure Cosmos DB instance](https://docs.microsoft.com/azure/machine-learning/concept-enterprise-security#azure-cosmos-db) used by the workspace.

  * cmk_keyvault: The Azure Resource Manager ID of an existing Azure Key Vault. This key vault must contain an encryption key, which is used to encrypt the Cosmos DB instance.
  * resource_cmk_uri: The URI of the encryption key stored in the key vault.

    When using a customer-managed key, Azure Machine Learning creates a secondary resource group which contains the Cosmos DB instance. For more information, see [encryption at rest - Cosmos DB](https://docs.microsoft.com/en-us/azure/machine-learning/concept-enterprise-security#encryption-at-rest).

## Setup

Before using this template, you must meet the following requirements:

* The __Azure Machine Learning__ service principal must have __contributor__ access to your Azure subscription.
* You must have an existing Azure Key Vault that contains an encryption key.
* The Azure Key Vault must exist in the same Azure region where you will create the Azure Machine Learning workspace.
* You must have an access policy in Azure Key Vault that grants __get__, __wrap__, and __unwrap__ access to the __Azure Cosmos DB__ application.

### Add Azure Machine Learning as a contributor

To add the Azure Machine Learning service principal as a contributor to your subscription, use the following steps:

1. Use the [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) or [Azure Powershell](https://docs.microsoft.com/powershell/azure/install-az-ps) to authenticate to get your subscription ID:

Azure CLI

```Bash
    az account list --query '[].[name,id]' --output tsv
```

PowerShell

```powershell
    Get-AzSubscription
```

From the list of subscriptions, select the one you want to use and copy the subscription ID.

1. To get the object ID of the `Azure Machine Learning` service principal, use one off the following commands:

Azure CLI

```Bash
    az ad sp list --display-name "Azure Machine Learning" --query '[].[appDisplayName,objectId]' --output tsv
```

PowerShell

```powershell
    Get-AzADServicePrincipal --DisplayName "Azure Machine Learning" | select-object DisplayName, Id
```

Save the ID for the `Azure Machine Learning` entry.

1. To add the service principal as a contributor to your subscription, use one of the following commands. Replace the `<subscription-ID>` with your subscription ID and `<object-ID>` with the ID for the service principal:

Azure CLI

```Bash
    az role assignment create --role 'Contributor' --assignee-object-id <object-ID> --subscription <subscription-ID>
```

PowerShell

```powershell
    New-AzRoleAssignment --ObjectId <object-ID> --RoleDefinitionName "Contributor" -Scope /subscriptions/<subscription-ID>
```

### Add a key for encryption

To generate a key in an existing Azure Key Vault, use the [prereq template](prereqs/prereq.azuredeploy.json) provide with this sample or one of the following commands. Replace `<keyvault-name>` with the name of the key vault. Replace `<key-name>` with the name to use for the key:

Azure CLI

```Bash
    az keyvault key create --vault-name <keyvault-name> --name <key-name> --protection software
```

PowerShell

```powershell
    Add-AzKeyVaultKey -VaultName <keyvault-name> -Name <key-name> -Destination 'Software'
```

### Enable customer-managged keys for Azure Cosmos DB

See data encryption section of [Enterprise Security for Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-enterprise-security#data-encryption) and [Configure customer-managed keys for your AzureCosmos account](https://docs.microsoft.com/azure/cosmos-db/how-to-setup-cmk).

### Add an access policy to the key vault

To add an access policy for Azure Cosmos DB to the key vault, use the following steps:

1. To get the object ID of the `Azure Cosmos DB` service principal, use one off the following commands:

Azure CLI

```Bash
    az ad sp list --display-name "Azure Cosmos DB" --query '[].[appDisplayName,objectId]' --output tsv
```

PowerShell

```powershell
    Get-AzADServicePrincipal --DisplayName "Azure Cosmos DB" | select-object DisplayName, Id
```

Save the ID for the `Azure Cosmos DB` entry.

1. To set the policy, use the following command. Replace `<keyvault-name>` with the name of the key vault. Replace `<object-ID>` with the ID for the service principal:

Azure CLI

```bash
    az keyvault set-policy --name <keyvault-name> --object-id <object-ID> --key-permissions get unwrapKey wrapKey
```

PowerShell

```powershell
    Set-AzKeyVaultAccessPolicy -VaultName <keyvault-name> -ObjectId <object-ID> -PermissionsToKeys get, unwrapKey, wrapKey
```

### Look up cmk_keyvault and resource_cmk_uri

Use this command to see cmk_keyvault.

Azure CLI: Id at the beginning of output is cmk_keyvault. Like this: /subscriptions/<subscripiton id>/resourceGroup/<rg name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>.

```bash
    az keyvault show --name <keyvault-name>
```

PowerShell: Resource id  is cmk_keyvault. Like this: /subscriptions/<subscripiton id>/resourceGroup/<rg name>/providers/Microsoft.KeyVault/vaults/<keyvault-name>.

```powershell
    Get-AzureRMKeyVault -VaultName '<keyvault-name>'
```
Use this command to see resource_cmk_uri.

Azure CLI: kid is resource_cmk_uri. Like this: https://<keyvault-name>.vault.azure.net/keys/<key-name>/******.

```bash
    az keyvault key show --vault-name <keyvault-name> --name <key-name>
```

PowerShell: Id is resource_cmk_uri. Like this: https://<keyvault-name>.vault.azure.net/keys/<key-name>/******.

```powershell
    Get-AzureKeyVaultKey -VaultName '<keyvault-name>' -KeyName '<key-name>'

## More information

* [Encryption at rest](https://docs.microsoft.com/azure/machine-learning/concept-enterprise-security#data-encryption)
* [Configure customer-managed keys for Azure Cosmos](https://docs.microsoft.com/azure/cosmos-db/how-to-setup-cmk).

`Tags: Azure Machine Learning, Machine Learning, encryption`


text:
package main

import (
	"fmt"
	"io"
	"io/ioutil"
	"net/http"
	"os"
	"path/filepath"

	"golang.org/x/oauth2"

	"strings"

	"github.com/blang/semver"
	"github.com/codegangsta/cli"
	"github.com/google/go-github/github"
	"github.com/jordanti/mupdater/log"
)

type repo struct {
	Owner string
	Repo  string
}

// AddApp - add a new app to be managed
func AddApp(c *cli.Context) {
	r := getRepoFromCli(c)

	artifact := c.String("artifact")
	alias := c.String("alias")

	// create the repo dir; if it already exists, exit with success
	_, alreadyExists := ensureRepoDir(r)
	if alreadyExists {
		log.Debug("This app has already been added")
		os.Exit(0)
	}

	// TODO: if we fail to add an app, we don't want to leave the directory around
	downloadReleaseFromGithub(r, artifact, alias)
}

func downloadReleaseFromGithub(r repo, artifact string, alias string) {
	client := github.NewClient(nil)

	config, err := loadConfig()
	if err != nil {
		DieWithError(err, "Could not load user config")
	}

	if token, ok := config.Config["token"]; ok {
		log.Debug("Using Github token from config.")
		// if the user has a token stored, use it
		ts := oauth2.StaticTokenSource(
			&oauth2.Token{AccessToken: token},
		)
		tc := oauth2.NewClient(oauth2.NoContext, ts)
		client = github.NewClient(tc)
	} else {
		log.Debug("No Github token found in config. Add it with `mup config` if you need it")
	}

	// with a provided token, this will also get repos for the authenticated user
	// TODO: support pagination
	releases, resp, err := client.Repositories.ListReleases(r.Owner, r.Repo, nil)
	if resp.StatusCode == 404 {
		Die("Could not find repository %s/%s. Maybe it doesn't exist, or you need to add your token for μpdater to have access.", r.Owner, r.Repo)
	} else if err != nil {
		DieWithError(err, "Error reaching Github")
	}

	updateFromGithubReleases(client, r, releases, "", artifact, alias)
}

func updateFromGithubReleases(client *github.Client, r repo, releases []github.RepositoryRelease, version string, artifact string, alias string) {
	// TODO: clean up this logic (e.g. use a Matcher -> is the version requested or greater than existing version)
	searchSV, err := semver.Make(cleanVersionName(version))
	hasSearchVersion := false
	if version != "" && err != nil {
		DieWithError(err, "Cannot update to a non-semver compatible version %s", version)
	} else if version != "" {
		hasSearchVersion = true
	}

	// TODO: shouldn't need to load this again
	cacheDir := getCacheDir()
	repoPath := filepath.Join(cacheDir, r.Owner, r.Repo)

	// find the ID of the last version we updated to (directory on disk)
	files, err := ioutil.ReadDir(repoPath)
	if err != nil {
		DieWithError(err, "Could not read from repo directory %s", r.Repo)
	}

	var newest semver.Version
	for _, f := range files {
		fname := cleanVersionName(f.Name())

		sv, err := semver.Make(fname)
		if err != nil {
			log.Debug("Found directory with a non-semver name: %s. Skipping.", f.Name())
			continue
		}

		// just skip non-semver directories for now
		if sv.Compare(newest) > 0 {
			newest = sv
		}
	}

	var releaseToInstall github.RepositoryRelease
	foundRelease := false
	for _, release := range releases {
		rname := cleanVersionName(*release.TagName)
		sv, err := semver.Make(rname)
		if err != nil {
			log.Debug("Found release version with a non-semver name: %s. Skipping", *release.TagName)
		}

		if *release.Draft || *release.Prerelease {
			log.Debug("Skipping release %s because it's a draft or a pre-release", *release.TagName)
		}

		if hasSearchVersion && searchSV.Equals(sv) {
			foundRelease = true
			releaseToInstall = release
		} else if sv.Compare(newest) > 0 {
			foundRelease = true
			releaseToInstall = release
		}

		if foundRelease {
			break
		}
	}

	if !foundRelease {
		if hasSearchVersion {
			Die("Could not find version %s", version)
		} else {
			Die("Could not find a newer version to install")
		}
	}

	// TODO: install this version
	releasePath := filepath.Join(cacheDir, r.Owner, r.Repo, *releaseToInstall.TagName)
	if err := os.Mkdir(releasePath, 0740); err != nil {
		DieWithError(err, "Could not create cache directory for %s/%s/%s", r.Owner, r.Repo, *releaseToInstall.TagName)
	}

	if len(releaseToInstall.Assets) > 1 && len(artifact) == 0 {
		// TODO: we shouldn't create the directory until we're sure we can install
		Die("Multiple artifacts for this app - you must specify only one with --artifact")
	} else {
		artifact = *releaseToInstall.Assets[0].Name
	}

	if len(alias) == 0 {
		log.Debug("No alias specified - using app name: %s", artifact)
		alias = artifact
	}

	for _, asset := range releaseToInstall.Assets {
		if *asset.Name != artifact {
			continue
		}

		closer, redirect, err := client.Repositories.DownloadReleaseAsset(r.Owner, r.Repo, *asset.ID)
		if closer == nil {
			resp, e := http.Get(redirect)
			if e != nil {
				DieWithError(e, "Could not follow redirect to asset: %s", redirect)
			}
			closer = resp.Body
		}
		log.Debug("Following redirect to download %s", *asset.Name)
		if err != nil {
			DieWithError(err, "Could not download asset %s", *asset.Name)
		}

		assetFile := filepath.Join(releasePath, *asset.Name)
		file, err := os.Create(assetFile)
		if err != nil {
			DieWithError(err, "Could not create file for %s", *asset.Name)
		}

		defer closer.Close()
		if _, err = io.Copy(file, closer); err != nil {
			DieWithError(err, "Could not write %s", *asset.Name)
		}
		log.Debug("Wrote asset to disk: %s", *asset.Name)
		if err = os.Chmod(assetFile, 0744); err != nil {
			DieWithError(err, "Could not add execute permission to %s", *asset.Name)
		}

		// create symlink in /usr/local/bin
		linkPath := filepath.Join("/usr/local/bin", alias)
		log.Debug("Creating link %s -> %s", linkPath, assetFile)
		os.Symlink(assetFile, linkPath)
	}

}

func cleanVersionName(vname string) string {
	if strings.HasPrefix(vname, "v") || strings.HasPrefix(vname, "V") {
		vname = vname[1:]
	}
	return vname
}

// RemoveApp - remove an existing app
func RemoveApp(c *cli.Context) {
	r := getRepoFromCli(c)

	cacheDir := getCacheDir()
	ownerPath := filepath.Join(cacheDir, r.Owner)
	repoPath := filepath.Join(cacheDir, r.Owner, r.Repo)

	// remove the repo directory
	if err := os.RemoveAll(repoPath); err != nil {
		DieWithError(err, "Could not remove app")
	}

	// if the owner directory is empty, remove it too
	if _, err := os.Stat(ownerPath); os.IsNotExist(err) {
		log.Debug("No libraries from user/org %s have been added. Nothing left to do", r.Owner)
		os.Exit(0)
	}

	files, err := ioutil.ReadDir(ownerPath)
	if err != nil {
		DieWithError(err, "Could not get contents of %s to see if it needed to be removed", ownerPath)
	}

	if len(files) > 0 {
		log.Debug("Directory for user/org %s is not empty, so not deleting it.", r.Owner)
		os.Exit(0)
	}

	log.Debug("No remaining apps for %s. Deleting parent directory", r.Owner)
	if err = os.RemoveAll(ownerPath); err != nil {
		DieWithError(err, "Unable to cleanup parent directory for user/org at %s", ownerPath)
	}
}

func getRepoFromCli(c *cli.Context) repo {
	if len(c.Args()) < 1 {
		Die("You must provide a Github repo")
	}

	r, err := getRepoFromString(c.Args()[0])
	if err != nil {
		DieWithError(err, "Invalid format. Should be [user|organization]/repo")
	}

	return r
}

func getRepoFromString(str string) (repo, error) {
	var r repo

	parts := strings.Split(str, "/")
	if len(parts) != 2 {
		return r, fmt.Errorf("Could not parse parts. Got: %s", str)
	}

	r = repo{
		Owner: parts[0],
		Repo:  parts[1],
	}

	return r, nil
}

func ensureRepoDir(r repo) (string, bool) {
	cacheDir := getCacheDir()
	repoPath := filepath.Join(cacheDir, r.Owner, r.Repo)

	if _, err := os.Stat(repoPath); os.IsNotExist(err) {
		if err = os.MkdirAll(repoPath, 0750); err != nil {
			DieWithError(err, "Could not create cache owner dir: %s", repoPath)
		}
		return repoPath, false
	}

	return repoPath, true
}

func getCacheDir() string {
	// check if app already exists, if it does, error
	baseDir, err := getConfigDir()
	if err != nil {
		DieWithError(err, "Could not get config directory")
	}

	cacheDir := filepath.Join(baseDir, "cache")
	if _, err := os.Stat(cacheDir); os.IsNotExist(err) {
		os.Mkdir(cacheDir, 0750)
	}

	return cacheDir
}

// // UpdateApp - update an existing app
// func UpdateApp(c *cli.Context) {
// 	fmt.Printf("Would be updating an app.\n")
// }
//
// // CheckForNewVersions - check for new versions
// func CheckForNewVersions(c *cli.Context) {
// 	fmt.Printf("Would be checking for new versions.\n")
// }